首先,两个数不互质同理于两个数的质因子集合没有交集。考虑一下 n≤30 的情况,可以发现这里面的质数也只有 10 个,那么我们将每一个寿司分解质因数,然后将质因子压成一个状态。
设 f[s1][s2] 表示小 G 吃了的寿司的状态为 s1 ,小 W 吃了的寿司的状态为 s2 时的方案数。转移的时候枚举寿司,分别判断两个人是否能吃然后转移即可。
1 |
|
可以知道 n≤500 的时候,每一个数最多带上一个大于等于 23 的质因子。我们首先将所有的寿司分为两类:带了大于等于 23 的质因子的和没带的。
没带的显然可以向上面那样转移。那么带了的呢?这个显然不能压缩吧。
我们考虑将带了同样的大于等于 23 的质因子的分成一组,这一组要不小 G 吃小 W 不吃,要不小 W 吃小 G 不吃。分别讨论即可。
设 f1[s1][s2] 表示这一组是小 G 吃时,小 G 吃了的寿司的状态为 s1 , 小 W 吃了的寿司的状态为 s2 时的方案数。同理,设 f2[s1][s2] 表示这一组是小 W 吃时,小 G 吃了的寿司的状态为 s1 , 小 W 吃了的寿司的状态为 s2 时的方案数。分别转移就好了。
1 | for(int i=pos+1;i<=n;++i) { /*枚举这些寿司*/ |
Code:
1 |
|
本文标题:【题解】 [NOI2015]寿司晚宴 状压DP loj2131
文章作者:Qiuly
发布时间:2019年05月01日 - 00:00
最后更新:2019年05月05日 - 09:22
原始链接:http://qiulyblog.github.io/2019/05/01/[题解]loj2131/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。
v1.5.2